﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title></title>
	<script type="text/javascript">
		/**
		  *摘自:<Javascript语言精髓与编程实践>pdf 104页
		  *
		  *
		  */

		  function foo()
		  {
		  		var data = this;//这里暂存了this,你当然也可以不暂存它
		  		return {};
		  		//or return new Object();

		  }
		  var obj = new foo();

		 

		  /**
		  	*描述:
		  	*		在这个例子中,最终obj也会被赋值为一个对象实例。但是这个实例并不是new运算产生的，而是foo()函数中返回的----注意，使用这种方法的时候，只能通过return 返回一个引用类型的直接量或对象实例，但不能是值类型的直接量(例如不能使true,'abc'之类).当用户试图返回这种之值类型数据时,脚本引擎会忽略掉他们，则仍然使用原生的this引用---而foo函数内部保留的new运算产生的实例，也可以拿来其他的作用(例如保存私有数据)
		  	*
		  	*
		  	*
		  	*/
 		  function Person()
		  {

		  	this.Age = 12;
		  	return 12;
		  }
		 // console.log((new Person().Age))输出'12'
		  	/**
		  	  *foo	视为普通函数的方法，虽然带来了一些特殊效果，但是也破坏了对象的继承链
		  	  *
		  	  *
		  	  *
		  	  */
	</script>
</head>
<body>
	

</body>
</html>